/** * Copyright (C) 2015 Caratarse Auth Team <lucio.benfante@gmail.com> * * This file is part of Caratarse Auth Model. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.caratarse.auth.model.util; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.restexpress.common.query.FilterCallback; import org.restexpress.common.query.FilterComponent; import org.restexpress.common.query.OrderCallback; import org.restexpress.common.query.OrderComponent; import org.restexpress.common.query.QueryFilter; import org.restexpress.common.query.QueryOrder; /** * Helper methods for translating rest filters to Criteria. * * @author <a href="mailto:lucio.benfante@gmail.com">Lucio Benfante</a> */ public class CriteriaFilterHelper { public static void addQueryFilter(final DetachedCriteria crit, QueryFilter filter) { if (filter == null) { return; } filter.iterate(new FilterCallback() { @Override public void filterOn(FilterComponent c) { switch (c.getOperator()) { case CONTAINS: // String-related crit.add(Restrictions.ilike(c.getField(), c.getValue().toString(), MatchMode.ANYWHERE)); break; case STARTS_WITH: // String-related crit.add(Restrictions.ilike(c.getField(), c.getValue().toString(), MatchMode.START)); break; case GREATER_THAN: crit.add(Restrictions.gt(c.getField(), c.getValue())); break; case GREATER_THAN_OR_EQUAL_TO: crit.add(Restrictions.ge(c.getField(), c.getValue())); break; case LESS_THAN: crit.add(Restrictions.lt(c.getField(), c.getValue())); break; case LESS_THAN_OR_EQUAL_TO: crit.add(Restrictions.le(c.getField(), c.getValue())); break; case NOT_EQUALS: crit.add(Restrictions.ne(c.getField(), c.getValue())); break; case EQUALS: default: crit.add(Restrictions.eq(c.getField(), c.getValue())); break; } } }); } public static void addQueryOrder(final DetachedCriteria crit, QueryOrder order) { if (order == null) { return; } if (order.isSorted()) { order.iterate(new OrderCallback() { @Override public void orderBy(OrderComponent component) { if (component.isAscending()) { crit.addOrder(Order.asc(component.getFieldName())); } else { crit.addOrder(Order.desc(component.getFieldName())); } } }); } } }